﻿using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using METODESA.Server.Data.Exceptions;
using METODESA.Server.Data.METODESA.Entity;
using METODESA.Server.Data.METODESA.Factorys;
using METODESA.Server.Data.METODESA.Nhibernate;
using System.Security.Cryptography;
using NHibernate;

namespace Metodesa.Logic
{
    public class ClienteLogic
    {

        public static IList<Cliente> processSearch(string search, string criteria)
        {
            if (criteria == "" || search == "")
            {
                return ClienteDao.getAllClient();
            }
            else
            {

                switch (criteria)
                {
                    case "Ci": return ClienteDao.GetClientByCedula(search);

                    case "Name": return ClienteDao.GetClientByName(search);

                    case "LastName": return ClienteDao.GetClientByLastName(search);

                }

            }

            return null;
        }


        /// <summary>
        /// Procedimiento para agregar clientes
        /// </summary>
        /// <param name="cliente"> Cliente que va a ser agregado</param>
        /// <returns></returns>
        public static int save(string apellido, string cedula, string direccion, string nombre)
        {
           try
            {
                Cliente cliente = FactoryCliente.getCliente(apellido, cedula, direccion, nombre);
                ClienteDao.saveEntity(cliente);
            }
            catch (HibernateException e)
            {
                NHibernateHelper.GetCurrentSession().Clear(); // Quitamos el query que nos dio error
                throw new EntityCouldntBeSaved("El cliente no ha podido guardarse "+e.Message);
            }
            
            
            return 0;
        }

        /// <summary>
        /// Procedimiento para borrar clientes
        /// </summary>
        /// <returns></returns>
        public static int delete(int id)
        {
            try
            {
                Cliente cliente = ClienteDao.getClienteById(id);
                ClienteDao.deleteEntity(cliente);
            }
            catch (HibernateException e)
            {
                NHibernateHelper.GetCurrentSession().Clear(); // Quitamos el query que nos dio error
                throw new EntityCouldntBeDeleted("El cliente no ha podido borrarse " + e.Message);
            }

            return 0;
        }

        /// <summary>
        /// Procedimiento para modificar clientes
        /// </summary>
        
        /// <returns></returns>
        public static int update(int id, string nombre, string apellido, string cedula,string direccion)
        {
            try
            {
                Cliente cliente = ClienteDao.getClienteById(id);
                cliente.Nombre = nombre;
                cliente.Apellido = apellido;
                cliente.CedulaRif = cedula;
                cliente.Direccion = direccion;
                ClienteDao.updateEntity(cliente);
            }
            catch (HibernateException e)
            {
                NHibernateHelper.GetCurrentSession().Clear(); // Quitamos el query que nos dio error
                throw new EntityCouldntBeUpdated("El cliente no ha podido modificarse " + e.Message);
            }

            return 0;
        }

    }
}
